package com.tanhua.server.controller;

import com.tanhua.model.domain.PageResult;
import com.tanhua.model.vo.SettingsVo;
import com.tanhua.server.interceptor.ThreadLocalUtils;
import com.tanhua.server.service.SettingsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

@RestController
@RequestMapping("/users")
public class SettingsController {


    @Autowired
    private SettingsService settingsService;

    /**
     *
     * 读取用户通用设置
     * 1.请求路径：users/settings
     * 2.请求参数：请求头中的token,Authorization
     * 3.响应参数：SettingsVo
     */
    @GetMapping("/settings")
    public ResponseEntity settings(){

        SettingsVo settingsVo = settingsService.settings();
        return ResponseEntity.ok(settingsVo);
    }



    /**
     *设置陌生人问题：如果没有查询出来问题，保存；
     * 如果查询出来问题，则是修改
     * 请求路径：/users/questions
     * 请求方式：post;
     * 请求参数：content(问题),用map集合接收
     */
    @PostMapping("/questions")
    public ResponseEntity setQuestion(@RequestBody Map map){

        //1.获取问题正文参数
        String content = (String) map.get("content");
        //2.调用业务层，完成问题保存或更新
        settingsService.setQuestion(content);
        return ResponseEntity.ok(null);
    }


    /**
     * 通知设置：
     * 请求路径：/users/notifications/setting
     *请求参数： likeNotification	boolean
     *         pinglunNotification	boolean
     *         gonggaoNotification   Boolean
     *         使用map集合接收
     */
    @PostMapping("/notifications/setting")
    public  ResponseEntity setNotification(@RequestBody Map map){

        //调用业务层完成业务更新
        settingsService.setNotification(map);
        return ResponseEntity.ok(null);
    }


    /**
     *
     * 黑名单翻页列表
     * 请求路径：/users/blacklist
     * 请求方式：get
     * 请求参数：page,当前页数;pagesize,页尺寸
     * 响应数据：PageResult
     */
    @GetMapping("/blacklist")
    public  ResponseEntity blackList(@RequestParam(defaultValue = "1") int page,
                                     @RequestParam(defaultValue = "10") int pageSize) {
       //1.调用业务层完成业务逻辑，分页查询
        PageResult pageResult = settingsService.queryBlacklist(page,pageSize);
        //2.构造返回数据
        return ResponseEntity.ok(pageResult);
    }


    /**
     * 取消黑名单
     * 请求路径：/users/blacklist/:uid
     * 请求方式：delete
     * 请求参数：路径参数，uid
     * 响应数据：状态码200
     */
    @DeleteMapping("/blacklist/{uid}")
    public  ResponseEntity deleteBlackList(@PathVariable("uid") Long blackUserId){

        //1.调用业务层完成业务逻辑
        settingsService.deleteBlackList(blackUserId);
        return  ResponseEntity.ok(null);
    }


    /**
     * 修改手机号之获取验证码；
     * 请求路径：/users/phone/sendVerificationCode
     * 请求方式：post
     */
    @PostMapping("/phone/sendVerificationCode")
    public ResponseEntity updateUserPhone(){
        String randomCode = settingsService.updateUserPhone();
        System.out.println("【探花交友】验证码："+randomCode+",验证码五分钟有效，请勿泄露");

        return ResponseEntity.ok(null);
    }


    /**
     *校验验证码：
     * 请求路径:/users/phone/checkVerificationCode
     * 请求方式：post
     * 请求参数：verificationCode，验证码
     * 响应数据：verification，boolean，是否验证通过
     */

    @PostMapping("/phone/checkVerificationCode")
    public ResponseEntity checkVerificationCode(@RequestBody Map map){
        //1.获取验证码
        String verificationCode = (String) map.get("verificationCode");

        //2.获取手机号码
        String userPhone = ThreadLocalUtils.getUserPhone();

        //3.调用业务层次校验验证码
        Map map1 = settingsService.verificationCode(verificationCode,userPhone);
        //4.响应数据
        return ResponseEntity.ok(map1);
    }

    /**
     * 修改手机号码之保存手机号码
     * 请求路径：/users/phone
     * 请求方式：post
     * 请求参数：phone，新手机号码
     * 响应数据：null
     */
    @PostMapping("phone")
    public ResponseEntity saveNewPhone(@RequestBody Map map){

        //直接调用业务层修改手机号码
        settingsService.savaUserPhone(map);
        return ResponseEntity.ok(null);
    }



}
